// 后台脚本 - 管理插件的生命周期
chrome.runtime.onInstalled.addListener(function() {
  console.log('屏幕模糊保护器已安装');
  
  // 设置默认配置
  chrome.storage.sync.set({
    screenSaverSettings: {
      blurIntensity: '10',
      slideInterval: 5000, // 5秒 = 5000毫秒
      backgroundStyle: 'images'
    }
  });
});

// 监听标签页更新，确保内容脚本正常工作
chrome.tabs.onUpdated.addListener((tabId, changeInfo, tab) => {
  if (changeInfo.status === 'complete' && tab.url && !tab.url.startsWith('chrome://')) {
    // 页面加载完成后，可以在这里做一些初始化工作
  }
});

// 带重试机制的消息发送函数（background版本）
function sendMessageWithRetry(tabId, message, callback, maxRetries = 3, delay = 200) {
  let attempts = 0;
  
  function attemptSend() {
    attempts++;
    chrome.tabs.sendMessage(tabId, message, function(response) {
      if (chrome.runtime.lastError) {
        console.log(`后台消息发送尝试 ${attempts}/${maxRetries} 失败:`, chrome.runtime.lastError.message);
        
        if (attempts < maxRetries && 
            chrome.runtime.lastError.message.includes('Could not establish connection')) {
          // 如果是连接错误且还有重试次数，则延迟后重试
          setTimeout(attemptSend, delay * attempts);
        } else {
          // 达到最大重试次数或其他错误，调用回调
          if (callback) callback(null, chrome.runtime.lastError);
        }
      } else {
        // 成功，调用回调
        if (callback) callback(response);
      }
    });
  }
  
  attemptSend();
}

// 检查并确保内容脚本已加载（background版本）
function ensureContentScriptLoaded(tabId, callback) {
  sendMessageWithRetry(tabId, {action: 'ping'}, function(response, error) {
    if (response && response.success) {
      callback(true);
    } else {
      console.log('后台检测到内容脚本未加载，尝试注入...');
      // 尝试重新注入内容脚本
      chrome.scripting.executeScript({
        target: { tabId: tabId },
        files: ['content.js']
      }, function() {
        if (chrome.runtime.lastError) {
          console.error('后台注入内容脚本失败:', chrome.runtime.lastError);
          callback(false);
        } else {
          // 等待一下再检查
          setTimeout(() => {
            sendMessageWithRetry(tabId, {action: 'ping'}, function(response) {
              callback(response && response.success);
            }, 1);
          }, 500);
        }
      });
    }
  }, 1); // 只尝试一次ping
}

// 处理快捷键命令
chrome.commands?.onCommand?.addListener((command) => {
  console.log('收到快捷键命令:', command);
  
  chrome.tabs.query({active: true, currentWindow: true}, function(tabs) {
    if (chrome.runtime.lastError) {
      console.error('查询标签页错误:', chrome.runtime.lastError);
      return;
    }
    
    if (!tabs[0]) {
      console.error('未找到活动标签页');
      return;
    }
    
    // 检查是否是受限制的页面
    if (tabs[0].url.startsWith('chrome://') || tabs[0].url.startsWith('chrome-extension://')) {
      console.log('当前页面不支持插件功能');
      // 可以选择显示通知
      chrome.notifications?.create({
        type: 'basic',
        iconUrl: '',
        title: '屏保插件',
        message: '当前页面不支持屏保功能，请在普通网页上使用'
      });
      return;
    }
    
    if (command === 'toggle-screen-saver') {
      // 切换屏保：先确保内容脚本加载，然后查询状态并切换
      ensureContentScriptLoaded(tabs[0].id, function(loaded) {
        if (!loaded) {
          console.error('快捷键操作失败：内容脚本无法加载');
          chrome.notifications?.create({
            type: 'basic',
            iconUrl: '',
            title: '屏保插件',
            message: '屏保功能启动失败，请刷新页面后重试'
          });
          return;
        }
        
        sendMessageWithRetry(tabs[0].id, {action: 'getState'}, function(response, error) {
          if (error) {
            console.error('查询屏保状态失败:', error);
            return;
          }
          
          const isActive = response && response.isActive;
          const action = isActive ? 'stopBlur' : 'toggleBlur';
          
          if (action === 'toggleBlur') {
            // 启动屏保时需要获取设置
            getStoredSettings().then(settings => {
              sendMessageWithRetry(tabs[0].id, {
                action: 'toggleBlur',
                settings: settings
              }, function(response, error) {
                if (error) {
                  console.error('快捷键启动屏保失败:', error);
                } else {
                  console.log('快捷键启动屏保成功');
                }
              });
            });
          } else {
            // 停止屏保
            sendMessageWithRetry(tabs[0].id, {action: 'stopBlur'}, function(response, error) {
              if (error) {
                console.error('快捷键停止屏保失败:', error);
              } else {
                console.log('快捷键停止屏保成功');
              }
            });
          }
        });
      });
    } else if (command === 'start-screen-saver') {
      // 直接启动屏保
      ensureContentScriptLoaded(tabs[0].id, function(loaded) {
        if (!loaded) {
          console.error('快捷键操作失败：内容脚本无法加载');
          chrome.notifications?.create({
            type: 'basic',
            iconUrl: '',
            title: '屏保插件',
            message: '屏保功能启动失败，请刷新页面后重试'
          });
          return;
        }
        
        getStoredSettings().then(settings => {
          sendMessageWithRetry(tabs[0].id, {
            action: 'toggleBlur',
            settings: settings
          }, function(response, error) {
            if (error) {
              console.error('快捷键启动屏保失败:', error);
            } else {
              console.log('快捷键启动屏保成功');
            }
          });
        });
      });
    }
  });
});

// 获取存储的设置
async function getStoredSettings() {
  return new Promise((resolve) => {
    chrome.storage.sync.get(['screenSaverSettings'], function(result) {
      if (result.screenSaverSettings) {
        const settings = result.screenSaverSettings;
        resolve({
          blurIntensity: settings.blurIntensity || '10',
          slideInterval: settings.slideInterval || 5000,
          backgroundStyle: settings.backgroundStyle || 'images'
        });
      } else {
        // 返回默认设置
        resolve({
          blurIntensity: '10',
          slideInterval: 5000,
          backgroundStyle: 'images'
        });
      }
    });
  });
} 